/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package klient;

import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;


/**
 *
 * @author xxx
 */
public class WypozyczKsiazkeDAO extends niezalogowany.PrzegladajKsiazkiDAO {
    
    public WypozyczKsiazkeDAO()
    {
        super();
    }
    
    public WypozyczonaKsiazkaData wypozyczKsiazke( Integer idBiblioteczny , Integer idKsiazki)
    {
         try {

             if(ileWypozyczonychKsiazek()<=4)
             {
             
             query="INSERT INTO `biblioteka`.`wypozyczenia` (`"
                     + "numer_wypozyczenia`, "
                     + "`ident_ksiazki`, `"
                     + "ident_biblioteczny`, "
                     + "`data_wypozyczenia`, "
                     + "`data_zwrotu` , prolongata) "
                     + "VALUES ("
                     + "NULL, "
                     + "?, "
                     + "?, "
                     + "current_date"
                     + ", DATE_ADD(current_date, INTERVAL ? DAY) , 0)";
                  
                  
                      
                    prepStmt = conn.prepareStatement(query);
                    
                     prepStmt.setInt(1, idKsiazki);
                     prepStmt.setInt(2, idBiblioteczny);
                     prepStmt.setInt(3, 14);
                    
                     
                    Integer ile =  prepStmt.executeUpdate();
                     System.out.println("ile  : " + ile);
                     
                     if(ile>0)
                     {
                         query=" UPDATE biblioteka.ksiazki "
                         + "SET status = 'wypożyczona' "
                        + "WHERE ksiazki.ident_ksiazki =?";
                         
                         prepStmt = conn.prepareStatement(query);                  
                         prepStmt.setInt(1, idKsiazki);// za ile dni ma oddać ) od dzisiaj)                 
                         prepStmt.executeUpdate();
                         
                         WypozyczonaKsiazkaData ks ;
                         
                         query="select * from wypozyczenia re, ksiazki ks , autorzy au "
                                 + "where ks.ident_ksiazki=re.ident_ksiazki "
                                 + "and ks.ident_autora = au.ident_autora "
                                 + "and re.ident_ksiazki=?";
                     
                         prepStmt = conn.prepareStatement(query);                  
                         prepStmt.setInt(1, idKsiazki);// za ile dni ma oddać ) od dzisiaj)                 
                         rs =prepStmt.executeQuery();
                         
                         if(rs.next())
                         {
                             ks = new WypozyczonaKsiazkaData(); 
                             ks.setDataWypozyczenia(rs.getDate("data_wypozyczenia"));
                             ks.setDataOddania(rs.getDate("data_zwrotu"));
                             ks.setTytul(rs.getString("tytul"));
                             ks.setImieAutora(rs.getString("imie"));
                             ks.setNazwiskoAutora(rs.getString("nazwisko"));
                             ks.setIdKsiazki(rs.getInt("ident_ksiazki"));
                             ks.setIdWypozyczenia(rs.getInt("numer_wypozyczenia"));
                             
                             return ks;
                         }else
                         {
                              error("Książka nie została wypożyczona.");
                         }
                         
                     }else
                     {
                          error("Książka nie została wypożyczona");
                     }
             }else
             {
                 error("Możesz wypożyczyć maksymalnie 5 książek");
             }
                     
                 
                    
                } catch (SQLException ex) {
                    error(ex.getMessage());
                    Logger.getLogger(WypozyczKsiazkeDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
         
         return null;

    }

    WypozyczonaKsiazkaData rezerwujKsiazke(Integer idBiblioteczny, Integer idKsiazki) {
       Integer ile ;
        try {
            
            if(ileWypozyczonychKsiazek() <=4)
            {
            
            query= " select * from rezerwacje where ident_ksiazki =?";
             prepStmt = conn.prepareStatement(query);   
             prepStmt.setInt(1, idKsiazki);
             rs= prepStmt.executeQuery();
             
             if(!rs.next())
             {
                 System.out.println("brak takiej rezerwacji");
                     query=  " select * from wypozyczenia  "
                       + "where ident_ksiazki=? "
                       + "and ident_biblioteczny=?";
                     
                     prepStmt = conn.prepareStatement(query);
                     prepStmt.setInt(1, idKsiazki );
                     prepStmt.setInt(2, idBiblioteczny);
                     rs=prepStmt.executeQuery();
                     System.out.println("czy nie wypzyczyles");
                     if(rs.next())
                     {
                          System.out.println("error wypozyczyles");
                         error("Już ją wypożyczyłeś.");
                         return null;
                     }
                 
                   query= "INSERT INTO biblioteka.rezerwacje "
                                  + "(numer_rezerwacji,  "
                                  + "data_rezerwacji, "
                                  + "data_wygasniecia,"
                                  + "ident_biblioteczny,  "
                                  + "ident_ksiazki)  " 
                              + "VALUES ("
                                   + "NULL, "
                                  + "current_date, "
                                  + "DATE_ADD(current_date, INTERVAL ? DAY), "
                                  + "?,"
                                   + "?)";
                   
                   
                    
         
                     prepStmt = conn.prepareStatement(query);
                     prepStmt.setInt(1, 30);
                     prepStmt.setInt(2, idBiblioteczny);
                     prepStmt.setInt(3, idKsiazki);
                     
                    ile  =  prepStmt.executeUpdate();
                    System.out.println(" insert rezerwacja");
                   if(ile>0)
                     {
                         System.out.println("zarezerwowales");
                         query=" UPDATE biblioteka.ksiazki "
                         + "SET status = 'zarezerwowana' "
                        + "WHERE ksiazki.ident_ksiazki =?";
                         
                         prepStmt = conn.prepareStatement(query);                  
                         prepStmt.setInt(1, idKsiazki);// za ile dni ma oddać ) od dzisiaj)                 
                         prepStmt.executeUpdate();
 
                 
                     }else
                     {
                          System.out.println(" insert nieudany");
                         error("Niestaty nie można dokonać rezerwacji");
                         return null;
                     }

                          WypozyczonaKsiazkaData ks ;
                         
                         query="select * from rezerwacje re, ksiazki ks , autorzy au "
                                 + "where ks.ident_ksiazki=re.ident_ksiazki "
                                 + "and ks.ident_autora = au.ident_autora "
                                 + "and re.ident_ksiazki=?";
                     
                         prepStmt = conn.prepareStatement(query);                  
                         prepStmt.setInt(1, idKsiazki);// za ile dni ma oddać ) od dzisiaj)                 
                         rs =prepStmt.executeQuery();
                         System.out.println(" select rezerwacje");
                         if(rs.next())
                         {
                             ks = new WypozyczonaKsiazkaData(); 
                             ks.setDataWypozyczenia(rs.getDate("data_rezerwacji"));
                             ks.setDataOddania(rs.getDate("data_wygasniecia"));
                             ks.setTytul(rs.getString("tytul"));
                             ks.setImieAutora(rs.getString("imie"));
                             ks.setNazwiskoAutora(rs.getString("nazwisko"));
                             ks.setIdKsiazki(rs.getInt("ident_ksiazki"));
                             ks.setIdWypozyczenia(rs.getInt("numer_rezerwacji"));
                             
                             System.out.println("id wypozyczenia : " +rs.getInt("numer_rezerwacji") );
                             return ks;
                         }else
                         {
                              System.out.println(" select nieudany");
                              error("Książka nie została zarezerwowana.");
                              return null;
                         }
                         
                     }else
                     {
                          error("Książka nie została zarezerwowana, ktoś Cię uprzedził.");
                           return null;
                     }
            }else
            {
                error("Nie możesz zarezerwować książki, masz ich już 5 na koncie !");
            }
                              
                } catch (SQLException ex) {
                    error(ex.getMessage());
                    Logger.getLogger(WypozyczKsiazkeDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
         
         return null;
        
    }

   
    
    
    
}
